www.gusucode.com > emg_functions > emg_functions/classify_offline/EASRC utilities/elm_train.m

    
% =========================================================================
%%%    Authors:    Kai Zhang AND DR Jiuwen Cao
%%%    Hangzhou Dianzi University, CHINA
%%%    EMAIL:      jwcao@hdu.edu.cn
%%%    DATE:       June 2016
%%% Please cite the paper: "J. Cao, K. Zhang, M. Luo, C. Yin and X. Lai, Extreme learning machine and adaptive sparse representation for image classification, Neural networks (2016), http://dx.doi.org/10.1016/j.neunet.2016.06.001"
%--------------------------------------------------------------------------

function [nn, acc_train] = elm_train(X, Y, nn)

% beta f(Wx+b) = y

tic;

ndata = size(X,2);
tempH = nn.W*X + repmat(nn.b,1,ndata);

switch lower(nn.activefunction)
    case{'s','sig','sigmoid'}
        H = 1 ./ (1 + exp(-tempH));
    case{'t','tanh'}
        H = tanh(tempH);
end

clear tempH;

switch(nn.method)
    case 'ELM'
        [beta,C_opt,LOO] = regressor(H', Y', 0);
    case 'RELM'
        [beta,C_opt,LOO] = regressor(H', Y', nn.C);
end

nn.time_train = toc;
nn.C_opt = C_opt;
nn.LOO   = LOO;

nn.beta  = beta';
Y_hat    = nn.beta*H;


if ismember(nn.type,{'c','classification','Classification'})
    [~,label_actual]  = max(Y_hat,[],1);
    [~,label_desired] = max(Y,[],1);
    acc_train = sum(label_actual==label_desired)/ndata;
else
    normfro   = norm(Y-Y_hat,'fro');
    acc_train = sqrt(normfro^2/ndata);
end


nn.trainlabel  = Y_hat;
nn.acc_train   = acc_train;